package com.tutorial.bootdemo.controller;


import com.tutorial.bootdemo.Response;
import com.tutorial.bootdemo.dto.StudentDTO;
import com.tutorial.bootdemo.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class StudentController {

    @Autowired
    private StudentService studentService;

    //根据id内容查询出学生的信息
    @GetMapping("/student/{id}")
    public Response<StudentDTO> getStudentById(@PathVariable long id) {
        return Response.newSuccess(studentService.getStudentById(id));
    }

    @GetMapping("/student")
    public Response<List<StudentDTO>> getStudentByAge(@RequestParam int maxAge, @RequestParam int minAge) {
        return Response.newSuccess(studentService.getStudentsByAges(maxAge, minAge));
    }

    //添加学生信息
    @PostMapping("/student")
    public Response<Long> addNewStudent(@RequestBody StudentDTO studentDTO) {
        //不需要指定主键值，因为具有@GeneratedValue(strategy = IDENTITY) 注解
        // 这是用于 Java 中的 JPA（Java Persistence API）注解的一部分，用于指定实体类中主键生成策略的方式。
        // 这个注解通常用于持久化实体类的主键字段上，自动生成主键值。
        // IDENTITY 是一种生成策略，表示数据库将使用自身的自动增长机制来生成主键值。
        // 这种策略依赖于数据库的 AUTO_INCREMENT等机制来生成主键值
        // 每次插入一条新记录时，数据库会自动生成一个唯一的主键值并赋给实体对象的主键字段。
        return Response.newSuccess(studentService.addNewStudent(studentDTO));
    }

    //删除学生信息
    @DeleteMapping("/student/{id}")
    public void deleteStudentById(@PathVariable long id) {
        studentService.deleteStudentById(id);
    }

    //修改学生信息
    @PutMapping("/student/{id}")
    public Response<StudentDTO> updateStudentById(@PathVariable long id,
                                                  @RequestParam(required = false) String name,
                                                  @RequestParam(required = false) String email){

        return Response.newSuccess(studentService.updateStudentById(id, name, email));
    }
}
